//
//  54.字符流中第一个不重复的字符.swift
//  数据结构与算法
//
//  Created by ZERO on 2021/6/2.
//

import Foundation
/*
 题目：请实现一个函数用来找出字符流中第一个只出现一次的字符。例如，当从字符流中只读出前两个字符"go"时，第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时，第一个只出现一次的字符是"l"。
     后台会用以下方式调用Insert 和 FirstAppearingOnce 函数
 思路1：用字典记录
 */
func offer_54() {
    let soluton = Solution()
    soluton.Insert("g")
    print(soluton.FirstAppearingOnce())
    soluton.Insert("o")
    print(soluton.FirstAppearingOnce())
    soluton.Insert("o")
    print(soluton.FirstAppearingOnce())
    soluton.Insert("g")
    print(soluton.FirstAppearingOnce())
    soluton.Insert("l")
    print(soluton.FirstAppearingOnce())
    soluton.Insert("e")
    print(soluton.FirstAppearingOnce())
}

fileprivate class Solution {
    private var str = ""
    private var dict = [Character: Int]()
    
    func Insert(_ ch: Character) {
        str += String(ch)
        if dict[ch] == nil {
            dict[ch] = 1
        } else {
            dict[ch]! += 1
        }
    }
    
    func FirstAppearingOnce() -> Character {
        for ch in str {
            if dict[ch] == 1 {
                return ch
            } else {
                str.removeFirst()
            }
        }
        return "#"
    }
}



